/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package eeep.dao;

import eeep.entidades.Identificacao;
import eeep.entidades.Telefone;
import eeep.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 *
 * @author Joao
 */
public class TelefoneDAO {
 public void salvarTelefone(Telefone telefone){
        String sql = "insert into telefone(numero,id_pessoa)\n" +
                     " values (?,(select id_pessoa from \n" +
                     " pessoa as p,identificacao as i\n" +
                     "  where p.id_identificacao=i.id_identificacao and \n" +
                     "  nome_identificacao=? and valor_identificacao=?))";

        Connection conn = null;
        PreparedStatement pstm = null;
        
             try {
            // Cria uma conexão com o banco
            conn = ConnectionFactory.getConexao();

            // Cria um PreparedStatment, classe usada para executar a query
            pstm = conn.prepareStatement(sql);

            // Adiciona o valor aos parametros da sql
            pstm.setString(1, telefone.getNumero());
            pstm.setString(2, telefone.getPessoa().getIdentificacao().getNome());
            pstm.setString(3, telefone.getPessoa().getIdentificacao().getValor());
            

            // Executa a sql para inserir os dados
            pstm.execute();

        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            // Fecha as coneções
            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }
   public ArrayList<Telefone> getTelefonePorPessoa(Identificacao identificacao){
        String sql = "select numero_telefone \n" +
                     "from telefone as t,identificacao as i,pessoa as p\n" +
                     " where t.id_pessoa=p.id_pessoa \n" +
                     " and i.id_identificacao=p.id_identificacao\n" +
                     " and nome_identificacao=? and valor_identificacao=? ";

		Connection conn = null;
		PreparedStatement pstm = null;
		// Classe que vai recuperar os dados do banco de dados
		ResultSet rset = null;

		try {
			conn = ConnectionFactory.getConexao();

                       pstm = conn.prepareStatement(sql);
                       pstm.setString(1,identificacao.getNome());
                       pstm.setString(2,identificacao.getValor());

			rset = pstm.executeQuery();

			// Enquanto existir dados no banco de dados
			ArrayList <Telefone> lista = new ArrayList(); 
                        while (rset.next()) {

				Telefone telefone = new Telefone();
				

				// Recupera o nome do banco e atribui ele ao objeto

                               telefone.setNumero(rset.getString("numero_telefone"));
				lista.add(telefone);
			}
                        return lista;
		} catch (Exception e) {

			e.printStackTrace();
		} finally {

			try {

				if (rset != null) {

					rset.close();
				}

				if (pstm != null) {

					pstm.close();
				}

				if (conn != null) {
					conn.close();
				}

			} catch (Exception e) {

				e.printStackTrace();
			}
		}

		return null;
    }
    
    public Telefone getTelefonePorNumero(String numero){
        String sql = "SELECT numero_telefone \n" +
                     "from telefone \n" +
                     "where numero_telefone=?";

		Connection conn = null;
		PreparedStatement pstm = null;
		// Classe que vai recuperar os dados do banco de dados
		ResultSet rset = null;

		try {
			conn = ConnectionFactory.getConexao();

			pstm = conn.prepareStatement(sql);
                        pstm.setString(1, numero);
                        

			rset = pstm.executeQuery();

			// Enquanto existir dados no banco de dados
                        while (rset.next()) {

				Telefone telefone = new Telefone();
                                
				

				// Recupera o nome do banco e atribui ele ao objeto

                                telefone.setNumero(rset.getString("numero_telefone"));
				
                                return telefone;
			}
		} catch (Exception e) {

			e.printStackTrace();
		} finally {

			try {

				if (rset != null) {

					rset.close();
				}

				if (pstm != null) {

					pstm.close();
				}

				if (conn != null) {
					conn.close();
				}

			} catch (Exception e) {

				e.printStackTrace();
			}
		}

		return null;
    }
    
  
    
    public void deleteTelefone(String numero){
        String sql = "Delete From telefone Where numero_telefone=?";

        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            // Cria uma conexão com o banco
            conn = ConnectionFactory.getConexao();

            // Cria um PreparedStatment, classe usada para executar a query
            pstm = conn.prepareStatement(sql);

            // Adiciona o valor aos parametros da sql
            pstm.setString(1, numero);
            

            // Executa a sql para inserir os dados
            pstm.execute();

        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            // Fecha as coneções
            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }
    public void atualizarTelefone(String numero1,String numero2){
        String sql = "UPDATE telefone \n" +
                     "set numero_telefone=?\n" +
                     " where numero_telefone=?";

        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            // Cria uma conexão com o banco
            conn = ConnectionFactory.getConexao();

            // Cria um PreparedStatment, classe usada para executar a query
            pstm = conn.prepareStatement(sql);

            // Adiciona o valor aos parametros da sql
            pstm.setString(1, numero1);
            pstm.setString(2, numero2);
            

            // Executa a sql para inserir os dados
            pstm.execute();

        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            // Fecha as coneções
            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }
}
